home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / irit / rend386 / polyblit / gsppt.asm < prev    next >
Encoding:
Assembly Source File  |  1992-12-06  |  4.1 KB  |  286 lines

  1.     TITLE    GSPPT - 320x200x16 mode support
  2.     NAME    GSPPT
  3.  
  4.  
  5.     COMMENT    $
  6.  
  7.     Name:        GSPPT
  8.  
  9.         Written and (c) by Dave Stampe 9/11/91
  10.         Not for commercial use, so get permission
  11.         before marketing code using this stuff!
  12.         For private PD use only.
  13.  
  14.         $
  15.  
  16.         .MODEL large
  17.         .CODE
  18.  
  19.  ;
  20.  ; void vsync();        /* waits for vert. sync pulse */
  21.  ;
  22.         PUBLIC    _vsync
  23.  
  24. _vsync    proc    far
  25.  
  26.     push    bp
  27.     mov    bp,sp
  28.     mov        dx,03DAh
  29.     in        al,dx        ; test if 0
  30.     test        al,8
  31.     je    short @11@218
  32. @11@122:
  33.     in        al,dx
  34.     nop
  35.     test        al,8            ; wait for 0
  36.     jne    short @11@122
  37. @11@218:
  38.     in        al,dx
  39.     nop
  40.     test        al,8            ; wait for 1
  41.     je    short @11@218
  42.     pop    bp
  43.     ret
  44.  
  45. _vsync    endp
  46.  
  47.  ;
  48.  ; void setup_hdwe(int mode);    /* sets up VGA for line, poly draw */
  49.  ;                              /* modes are: 0=PUT, 1=OR,         */
  50.  ;                /*          2=AND, 3=XOR         */
  51.  
  52.         PUBLIC    _setup_hdwe
  53.  
  54. _setup_hdwe    proc    far
  55.  
  56.     push    bp
  57.     mov    bp,sp
  58.     mov    dx,03CEH
  59.     mov    ah,BYTE PTR [bp+6]      ; set write logic mode
  60.     sal    ah,1
  61.     sal    ah,1
  62.     sal    ah,1
  63.     mov    al,03h
  64.     out    dx,ax
  65.     mov    ax,0B05h                ; write mode = 3 (CPU byte is mask)
  66.     out    dx,ax
  67.     mov    ax,0007h                ; setup for FFh returned by read
  68.     out    dx,ax
  69.     mov    ax,0FF08h               ; all bits enabled
  70.     out    dx,ax
  71.     mov    ax,0FF01h
  72.     out    dx,ax
  73.     pop    bp
  74.     ret
  75.  
  76. _setup_hdwe    endp
  77.  
  78.  ;
  79.  ; void reset_hdwe()
  80.  ;
  81.  
  82.         PUBLIC    _reset_hdwe
  83.  
  84. _reset_hdwe    proc    far
  85.  
  86.     push    bp
  87.     mov    bp,sp
  88.     mov    dx,03CEH
  89.     mov    ax,0000         ; reset VGA to mode BIOS expects
  90.     out    dx,ax
  91.     mov    ax,0001
  92.     out    dx,ax
  93.     mov    ax,0003
  94.     out    dx,ax
  95.     mov    ax,0005
  96.     out    dx,ax
  97.     pop    bp
  98.     ret
  99.  
  100. _reset_hdwe    endp
  101.  
  102.  ;
  103.  ; int clr_page(int page, int color);    /* clear page to color */
  104.  ;
  105.  ;  /* returns 0 if OK, 1 if bad page */
  106.  
  107.         PUBLIC    _clr_page
  108.  
  109. _clr_page    proc    far
  110.  
  111.     push    bp
  112.     mov    bp,sp
  113.     dec    sp
  114.     dec    sp
  115.     push    di
  116.     mov    ax,word ptr [bp+6]      ; compute page addr
  117.     mov    cl,13
  118.     shl    ax,cl
  119.     mov    word ptr [bp-2],ax
  120.     cmp    word ptr [bp+6],7       ; check for valid page
  121.     jle    short @14@74
  122.     mov    ax,65535
  123.     jmp    short @14@482
  124. @14@74:
  125.     call    far ptr _reset_hdwe     ; reset to default VGA mode
  126.     cld
  127.     mov    dx,03CEh
  128.     mov    al,0                  ; set write color
  129.     mov    ah,BYTE PTR [bp+8]
  130.     out    dx,ax
  131.     mov    ax,0F01h
  132.     out    dx,ax
  133.     mov    ax,0A000h
  134.     mov    es,ax
  135.     mov    cx,4000
  136.     mov    al,[bp+8]               ; write pageful of color (8K)
  137.     mov    di,[bp-2]
  138.     rep    stosw
  139.     mov    ax,0001h                ; reset VGA mode
  140.     out    dx,ax
  141.     xor    ax,ax
  142. @14@482:
  143.     pop    di
  144.     mov    sp,bp
  145.     pop    bp
  146.     ret
  147.  
  148. _clr_page    endp
  149.  
  150.    ;
  151.    ;    int copy_page(int source, int dest)
  152.    ;
  153.    ;    /* returns 0 if OK, 1 if bad page */
  154.  
  155.         PUBLIC    _copy_page
  156.  
  157. _copy_page    proc    far
  158.  
  159.     push    bp
  160.     mov    bp,sp
  161.     sub    sp,4
  162.     push    si
  163.     push    di
  164.     mov    ax,word ptr [bp+6]        ; compute source address
  165.     mov    cl,13
  166.     shl    ax,cl
  167.     mov    word ptr [bp-2],ax
  168.     mov    ax,word ptr [bp+8]    ; compute dest. address
  169.     shl    ax,cl
  170.     mov    word ptr [bp-4],ax
  171.     cmp    word ptr [bp+6],7
  172.     jg    short @15@74            ; check for valid page #'s
  173.     cmp    word ptr [bp+8],7
  174.     jle    short @15@98
  175. @15@74:
  176.     mov    ax,65535
  177.     jmp    short @15@506
  178. @15@98:
  179.     call    far ptr _reset_hdwe     ; default VGA state
  180.     push    ds
  181.     cld
  182.     mov    dx,03CEh                  ; read mode 0, write mode 1 (copy)
  183.     mov    ax,0105h
  184.     out    dx,ax
  185.     mov    ax,0A000h
  186.     mov    es,ax
  187.     mov    ds,ax
  188.     mov    cx,8000
  189.     mov    si,[bp-2]
  190.     mov    di,[bp-4]
  191.     rep    movsb                   ; copy whole page (8K)
  192.     mov    ax,0005h
  193.     out    dx,ax
  194.     pop    ds
  195.     xor    ax,ax
  196. @15@506:
  197.     pop    di
  198.     pop    si
  199.     mov    sp,bp
  200.     pop    bp
  201.     ret
  202.  
  203. _copy_page    endp
  204.  
  205.  
  206.  ;
  207.  ; void vga_reg(int reg)     /* integer: lsby=reg(0=color), msby=value */
  208.  ;
  209.  
  210.         PUBLIC    _vga_reg
  211.  
  212. _vga_reg    proc    far
  213.  
  214.     push    bp
  215.     mov    bp,sp
  216.     mov    dx,03CEH
  217.     mov    ax,WORD PTR [bp+6]
  218.     out    dx,ax
  219.     pop    bp
  220.     ret
  221.  
  222. _vga_reg    endp
  223.  
  224.  
  225.  
  226.  ;
  227.  ; void load_color(int color)    /* integer: color reg. load */
  228.  ;
  229.  
  230.         PUBLIC    _load_color
  231.  
  232. _load_color    proc    far
  233.  
  234.     push    bp
  235.     mov    bp,sp
  236.     mov    dx,03CEH
  237.     xor    al,al
  238.     mov    ah,BYTE PTR [bp+6]
  239.     out    dx,ax
  240.     pop    bp
  241.     ret
  242.  
  243. _load_color    endp
  244.  
  245.  
  246.  ;
  247.  ; void _set_vmode(int mode)    /* enters video mode thru BIOS */
  248.  ;
  249.  
  250.         PUBLIC    _set_vmode
  251.  
  252. _set_vmode    proc    far
  253.  
  254.     push    bp
  255.     mov    bp,sp
  256.     mov    ah,0
  257.     mov    al,BYTE PTR [bp+6]
  258.     int    10h
  259.     pop    bp
  260.     ret
  261.  
  262. _set_vmode    endp
  263.  
  264.  
  265.  ;
  266.  ; void _set_vpage(int page)    /* sets video page thru BIOS */
  267.  ;
  268.  
  269.         PUBLIC    _set_vpage
  270.  
  271. _set_vpage    proc    far
  272.  
  273.     push    bp
  274.     mov    bp,sp
  275.     mov    ah,5
  276.     mov    al,BYTE PTR [bp+6]
  277.     int    10h
  278.     pop    bp
  279.     ret
  280.  
  281. _set_vpage    endp
  282.  
  283.  
  284.         end
  285.  
  286.